package com.itlong.cloud.property.dao;

import com.itlong.cloud.POJO.DTO.property.PropertyProjectGetCommunityInfoDTO;
import com.itlong.cloud.POJO.PO.ProjectPO;
import com.itlong.cloud.POJO.PO.PropertyUserInfoPO;
import com.itlong.cloud.POJO.VO.property.PropertyAccessRecordVO;
import com.itlong.cloud.POJO.VO.property.PropertyProjectCommunityInfoVO;
import com.itlong.cloud.POJO.VO.property.PropertyProjectUserTypeVO;
import com.itlong.cloud.POJO.VO.property.PropertyTaskVO;
import com.itlong.cloud.abstracts.IAbstractBaseDao;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.Map;

/**
 * <desc>
 *     小区信息数据访问接口
 * </desc>
 * @createDate 2017-10-10.
 */
@Mapper
@Repository
public interface IPropertyCommunityInfoDao extends IAbstractBaseDao<ProjectPO> {
    /**
     * <desc>
     *      查询小区信息
     * <desc/>
     * @param  projectId 查询参数
     * @return 小区相关信息返回对象
     * @author ZiXuan
     * @createDate 2017-10-11
     */
    PropertyProjectCommunityInfoVO getCommunityInfo(@Param("projectId")String projectId, @Param("userId") String loginUserId);

    /**
     * <desc>
     *      查询此类型是否被用户关联
     * <desc/>
     * @param  projectId 查询参数
     * @param  type 用户类型
     * @return
     * @author Juguang.S
     * @createDate 2021-04-12
     */
    Integer getUserTypeByRelation(@Param("projectId")String projectId, @Param("type") Integer type);

    /**
     * <desc>
     *      根据项目编号获取用户类型列表
     * <desc/>
     * @param  projectId 查询参数
     * @return 小区相关信息返回对象
     * @author Juguang.S
     * @createDate 2021-04-12
     */
    List<PropertyProjectUserTypeVO> getProjectUserTypeInfo(@Param("projectId")String projectId);

    /**
     * <desc>
     *  修改小区信息
     * </desc>
     *
     * @param params 保存的参数
     * @return 受影响的行数
     * @author ZiXuan
     * @createDate 2017-10-23
     */
    Integer update(Map<String, Object> params);

    /**
     * <desc>
     *      获取对应条件的账单总数
     * </desc>
     *
     * @param params 条件参数集
     * @return 对应条件的账单总数
     * @author wangzhi
     * @createDate 2019/05/24
     */
    Integer getFeeCount(Map<String, Object> params);

    /**
     * <desc>
     *      获取累计收入总额
     * </desc>
     *
     * @param projectId 项目编号
     * @return 累计收入总额
     * @author wangzhi
     * @createDate 2019/05/24
     */
    String getAggregateIncome(@Param("projectId") String projectId);

    /**
     * <desc>
     *      统计累计收入总额（按支付订单统计）
     * </desc>
     *
     * @return 累计收入总额
     * @author wangzhi
     * @createDate 2019/10/31
     */
    String getAggregateIncomeTrade(@Param("projectId") String projectId, @Param("mchId") String mchId);

    /**
     * <desc>
     *      获取剩余任务，报修数量
     * </desc>
     *
     * @param params 查询参数集
     * @return 剩余任务，报修数量
     * @author wangzhi
     * @createDate 2019/05/24
     */
    Integer getRepairCount(Map<String, Object> params);

    /**
     * <desc>
     *      获取剩余任务报修明细
     * </desc>
     *
     * @param params 查询参数集
     * @return 剩余任务报修明细
     * @author wangzhi
     * @createDate 2019/05/24
     */
    List<PropertyTaskVO> getRepairData(Map<String, Object> params);

    /**
     * <desc>
     *      获取昨日通行次数
     * </desc>
     *
     * @param params 查询参数集
     * @return 昨日通行次数
     * @author wangzhi
     * @createDate 2019/05/24
     */
    Integer getYesterdayAccessRecordCount(Map<String, Object> params);

    /**
     * <desc>
     *      获取昨日通行记录信息
     * </desc>
     *
     * @param params 查询参数集
     * @return 昨日通行记录信息
     * @author wangzhi
     * @createDate 2019/05/24
     */
    List<PropertyAccessRecordVO> getAccessRecord(Map<String, Object> params);

    /**
     * <desc>
     *      获取物业账号信息
     * </desc>
     *
     * @param userId 用户id
     * @return 物业账号信息
     * @author wangzhi
     * @createDate 2019/08/08
     */
    PropertyUserInfoPO getPropertyUserInfoByUserId(@Param("userId") String userId);

    /**
     * <desc>
     *      获取通行方式和对应记录数，一周内
     * </desc>
     *
     * @return 通行方式和对应记录数
     * @author wangzhi
     * @createDate 2019/10/16
     */
    List<Map<String,Object>> getPassTypeCount(PropertyProjectGetCommunityInfoDTO propertyProjectGetCommunityInfoDTO);

    /**
     * <desc>
     *     保存收费间隔时间
     * <desc/>
     *
     * @param  projectId  项目编号
     * @param  intervalTime  间隔时间
     * @param  warningTimes  预警次数
     * @return  MessageVO 标准格式化响应结果
     * @author JuGuang.S
     * @createDate 2020/07/15
     */
    void saveFeeIntervalTime(@Param("projectId") String projectId,
                             @Param("intervalTime") String intervalTime,
                             @Param("warningTimes") Integer warningTimes);

    /**
     * <desc>
     *     获取项目收费间隔时间
     * <desc/>
     *
     * @param  projectId  项目编号
     * @return  MessageVO 标准格式化响应结果
     * @author JuGuang.S
     * @createDate 2020/07/20
     */
    Map<String,Object> getFeeIntervalTimeByProjectId(@Param("projectId") String projectId);

    /**
     * <desc>
     *      根据项目编号获取userId
     * <desc/>
     *
     * @param projectIdArr 项目编号,多个以逗号隔开
     * @return
     * @author Juguang.S
     * @createDate 2018-08-21
     */
    List<String> getUserIdByProjectId(@Param("projectIdArr") List<String> projectIdArr);

    /**
     * <desc>
     *      根据userId修改物业账号中的物业名称
     * <desc/>
     *
     * @param userIdList 记录id列表
     * @return
     * @author Juguang.S
     * @createDate 2018-08-22
     */
    void updatePropertyNameByUserId(@Param("userIdList") List<String> userIdList,@Param("propertyName") String propertyName);

    /**
     * <desc>
     *     获取项目下所有云电梯设备
     * <desc/>
     *
     * @param  projectId  项目编号
     * @return  MessageVO 标准格式化响应结果
     * @author JuGuang.S
     * @createDate 2021/01/07
     */
    List<String> getCloudElevatorByProjectId(@Param("projectId") String projectId);
}
